Skip to content

Linux環境における netstat -an 出力形式に対応したポート検出正規表現を追加#43

Merged
harakeishi merged 2 commits intoharakeishi:mainfrom
aaaaninja:feature/linux-support
Mar 2, 2026
Merged

Linux環境における netstat -an 出力形式に対応したポート検出正規表現を追加#43
harakeishi merged 2 commits intoharakeishi:mainfrom
aaaaninja:feature/linux-support

Conversation

@aaaaninja
Copy link
Contributor

@aaaaninja aaaaninja commented Feb 26, 2026

概要

Linux/WSL2環境の netstat -an 出力形式(0.0.0.0:11211, :::11211)を正しく解釈できず、システムポート衝突を見逃す問題を修正しました。
あわせて、CLI E2Eの検証を exit_code == 0 のみから、衝突表示の実アサート付きに強化し、Linuxで本来検知すべき不具合を見逃しにくくしました。

変更内容

  • internal/scanner/netstat.go
    • netstatパーサを正規表現ベースのまま維持しつつ、OS別に使用regexを切り替える実装に変更
    • Linux形式(host:port)と BSD/macOS形式(host.port)を明確に分離
    • Windowsは未検証のため、エラー終了ではなくベストエフォート解析
  • internal/scanner/netstat_test.go
    • Linux形式のLISTEN行(IPv4/IPv6)テストを追加
    • 実行OSに応じて対象ケースを切り替えるテスト構成に更新
  • README.md
    • Platform Test Status テーブルを追加
    • macOS / Linux: Tested, Windows: Not tested を明記
  • testdata/gopose/gopose_e2e_test.yml
    • CLI E2E(port conflictシナリオ)を強化
    • exit_code だけでなく、Port Conflicts: などの出力内容をアサート
    • trap によるクリーンアップで後始末を安定化

期待すること

  • Linux/WSL2でシステムポート衝突が正しく検出されること
  • CI上のCLI E2Eで、exit code 0 だけでは拾えない回帰(衝突表示欠落)を検知できること
  • 対応OSの検証状況がREADMEで明確になること

動作確認

項目 結果 備考
go test ./internal/scanner -run TestParseNetstatOutput -v PASS Linux形式テストを含む
go test ./... PASS 全パッケージ
ビルドしたバイナリの手動テスト PASS port conflictが正しく検出されることを確認
CI (E2E) PASS fork先repositoryでの確認

補足

  • 本PRでは正規表現方針を維持したまま最小差分でLinux対応しています。

  • Windowsは現時点で未検証のため、READMEに明記しています。

  • 最小の変更で済むようにruntime.GOOSを使うようにしましたが、依存を外したいなら将来的にはnetstatを直接使うのではなく必要ポートだけを直接チェックするのもありだと思います。

  - API: net.Listen("tcp", ":<port>"), net.ListenPacket("udp", ":<port>")
  - 判定: errors.Is(err, syscall.EADDRINUSE)(Windowsは x/sys/windows の WSAEADDRINUSE も考慮)
  - 利点: netstat パース不要、OS差分が小さい
  - 注意: TOCTOU(チェック後に他プロセスが掴む)と、特権ポートの EACCES を別扱いにする必要あり

OS別パーサ選択を追加し、netstatテスト拡張とREADMEのプラットフォーム検証状況を追記
exit_codeだけの検証では本来落ちるべきLinux環境の失敗を検知できなかったため、Port Conflicts出力を明示検証しcleanupもtrapで安定化
Copy link
Owner

@harakeishi harakeishi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRありがとうございます!!

@harakeishi harakeishi merged commit 525940c into harakeishi:main Mar 2, 2026
4 checks passed
@harakeishi
Copy link
Owner

@all-contributors please add @aaaaninja for code

@allcontributors
Copy link
Contributor

@harakeishi

I've put up a pull request to add @aaaaninja! 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants